package db

import (
	"time"

	"gorm.io/gorm"
)

// Api 结构体用于存储 API 信息
type Api struct {
	gorm.Model
	GroupID     uint   `json:"groupId"`
	Name        string `json:"name"`
	Method      string `json:"method"`
	URL         string `json:"url"`
	Headers     string `json:"headers"` // JSON 字符串存储
	Params      string `json:"params"`  // JSON 字符串存储
	Body        string `json:"body"`    // JSON 字符串存储
	Description string `json:"description"`
}

// ApiGroup 表示 API 分组
type ApiGroup struct {
	gorm.Model
	Name      string    `json:"name"`
	ParentID  uint      `json:"parent_id"`
	Sort      int       `json:"sort"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// Api 相关的数据库操作
func (a *Api) LoadById(id uint) *Api {
	db1.First(a, id)
	return a
}

func (a *Api) Save() error {
	return db1.Save(a).Error
}

func (a *Api) Delete() error {
	return db1.Delete(a).Error
}

func FindApisByGroupId(groupId uint) []*Api {
	var apiList []*Api
	db1.Where("group_id = ?", groupId).Find(&apiList)
	return apiList
}

func (a *ApiGroup) Save() {
	db1.Save(a)
}

func FindAllApiGroups() []*ApiGroup {
	var groups []*ApiGroup
	db1.Find(&groups)
	return groups
}

func FindApiGroupById(id int64) *ApiGroup {
	var group ApiGroup
	db1.First(&group, id)
	return &group
}

func FindApiGroupByName(name string) *ApiGroup {
	var group ApiGroup
	db1.Where("name = ?", name).First(&group)
	return &group
}

func DeleteApiGroup(group *ApiGroup) {
	db1.Delete(group)
}
